第1章 ソフトウェアの品質
1.1 外的品質要因と内的品質要因
外的品質要因はスピードや使いやすさ(ユーザビリティ)など、ソフトウェア製品にその性質が歩かないかをユーザが認識できる要因。
内的品質要因はモジュール性や可読性など、ソフトウェアのコードにアクセスできるコンピュータの専門家にしかアクセスできない。
最終的には外的品質要因だが、外的品質要因を達成するには目に見えない性質の保証が重要になるため内的品質要因が重要になる。
1.2 外的品質要因
正確さ
使用によって定義されている通りに仕事を実行するソフトウェア製品の能力である。
最重要でありオブジェクト指向ソフトウェア構築の中心的使命
様々な前提条件の上で成り立つため、個々の層が下の層に対して依存するようにする必要がある。
ソフトウェアの正確さはテストやデバッグよりも型付けや表明などの技法を利用して構築していく。
頑丈さ
異常な条件に対して適切に対応するソフトウェアシステムの能力である。
適切なエラーメッセージを出力して実行を終了させることなど。
拡張性
仕様の変更に対するソフトウェアの適応のしやすさである。
伝統的なソフトウェア工学の手法では、最初の分析で要求を凍結し残りを設計と実現に費やすのが理想的とされていた。
しかし現在ではソフトウェア開発で変更に対処することが重要になった。
拡張性を向上させるのに重要な原則
設計の単純さ
単純なアーキテクチャは複雑なアーキテクチャよりも常に変更しやすい。
非集中化
モジュールの自治性が高まるほど、単純な変更が与える影響が1つまたは少数のモジュールに止まる可能性が高まるのでシステム全体に影響を及ぼさない。
再利用性
多数多様なアプリケーションの構築に使うことのできる、ソフトウェア要素の能力である。
ソフトウェアシステムが同じパターンが多く使われるため、共通パターンを把握することで再利用可能なソフトウェア要素を多くの異なる開発に応用できる。
再利用性の問題を解決することは、同じコストでより多くの労力を正確さや頑丈さなどの他の要因に割くことができる。
互換性
ソフトウェアの要素の、ほかのソフトウェア要素との組み合わせやすさである。
ソフトウェアは相互に作用し合う必要があるが、周囲の世界と対立する前提条件を採用しているため、相互作用に問題が生じる場合は非常に多い。
互換性の鍵は、設計が同質であること、プログラム間のコミュニケーションの標準的規約が一致していること。
効率性
処理時間、内部記憶および外部記憶上の空間、通信装置で使用する帯域幅などのハードウェア資源をできる限り必要都市内ソフトウェアシステムの能力である。
性能の問題に過度に固執して多大な労力を費やして最適化に邁進する人もいれば、「速くする前に正しいものを作れ」や「来年になれば50%は早いコンピュータがでる」といった性能を軽視する人もいる。
一般的に効率性を考えるときは拡張性や再利用性などの他の目標とのバランスをとる事になる。(極端な最適化はソフトウェアが特殊化する)
可搬性
多様なハードウェアおよびソフトウェア環境へのソフトウェア製品の移植しやすさである。
使いやすさ
経験も資格も異なる人々がいかに容易にソフトウェア製品の利用法を学習し、問題解決に応用できるかである。これには、インストールや、操作、監視の容易さも含まれる。
設計者は上級レベルのユーザが即座に仕事にとりかかるのを邪魔しないように、いかに入門レベルのユーザに対して詳細な支持と説明を与えるかを考慮しなければならない。
使いやすさの鍵は構造の単純さである。使いやすさはオブジェクト指向的手法の生産性が特に発揮され、エンドユーザーを助ける新しい強力なインターフェースのアイデアを生み出す物でもある。
機能性
そのシステムが提供できるサービスの範囲である。
適時性
ユーザがひつようとしているとき、または必要とするまえにソフトウェアシステムをリリースできることである。
実証性
評価および実用段階において、不具合を検出し、その不具合からエラーをたどるための手続きの準備と、特にテストデータなどの受け入れ手続きの準備の容易さである。
統合性
さまざまな構成要素を認証されていないアクセスや修正から守るソフトウェアシステムの能力である。
修復性
欠陥の修復を助ける能力である。
経済性
適時性と対をなすもので、与えられた予算で、または与えられた予算以下でシステムを完成させることができることである。
ドキュメントについて
ドキュメントは独立した品質要因ではなく、ドキュメントの必要性は品質要因の結果である。
ドキュメントをソフトウェアそのものとは別の製品として扱うのではなく、できる限りソフトウェア自体をドキュメントにするのが望ましい。
外部向けドキュメント => オンラインヘルプ機能
内部向けドキュメント => 良い実装言語は明確さと構造を重視するので内部向けドキュメントの必要性はほとんど無くなる。
オブジェクト指向的表記法によって情報隠蔽や表明などの適用でモジュールのインターフェースを仕様から分離すればツールでモジュールのテキストからモジュールインターフェースドキュメントを自動生成できる。
トレードオフについて
使いやすさと統合性、経済性と機能性、効率性と可搬性・再利用性、適時性と拡張性など。
それでも正確さと頑丈さ、拡張性と再利用性は特に重要となる。
正確さと頑丈さ(信頼性)
静的型付け、表明、自動メモリ管理、制御された例外機構
拡張性と再利用性(モジュール性)
再利用可能な汎用コンポーネント、自己充足しているコンポーネント
ソフトウェアの保守
LientzとSwansonの研究から、保守コストの2/5がユーザーによって要求された拡張と修正に充てられる。
1/5もデータフォーマットの変更がある。